package core.comunication;

import java.io.Serializable;

/**
 * La ChunkSend è il container delle frame che inviamo. Implementa Serializable
 * E' così strutturata:
 * |FileName|indice chunk|dati chunk|
 *
 * @author Vincenzo Merlo, Scuderi Giovanni Luca, Paolo Giuffrida
 *
 */
class ChunkSend implements Serializable {

    /**
     * Serial ID Version. Consente di essere sicuri sul tipo di implementazione usata
     */
    private static final long serialVersionUID = 8742029246132786797L;
    private String fileName = null; // nome del file a cui fa riferimento il chunk
    private Integer packetIndex = 0; // parametro indice di pacchetto/chunk
    private byte[] chunk = null; // dati del pacchetto

    /**
     * Costruttore di "default". Crea il paccketto riempendo i parametri della frame di invio ( chunk )
     */
    public ChunkSend(String filename, int packetIndex, byte[] chunk) {
        this.fileName = filename;
        this.packetIndex = packetIndex;
        this.setChunk(chunk);
    }

    /**
     * Ritorna il nome del file di riferimento del chunk
     * @return nome del file di riferimento del chunk
     */
    public String getFileName() {
        return fileName;
    }
    /**
     * setta il nome del file di riferimento del chunk
     * @param nome del file a cui deve fare riferimento il chunk
     */

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    /**
     * Ritorna l'indice del chunk
     * @return indice del chunk
     */
    public Integer getPacketIndex() {
        return packetIndex;
    }

    /**
     * setta l'indice del chunk
     * @param indice del chunk
     */
    public void setPacketIndex(Integer packetIndex) {
        this.packetIndex = packetIndex;
    }

    /**
     * ritorna il numero di versione dell'implementazione
     */
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    /**
     * setta il contenuto informativo del chunk, ovvero il payload.
     * @param payload, in byte, da settare
     */
    public void setChunk(byte[] chunk) {
        this.chunk = chunk;
    }

    /**
     * ritorna il contenuto del chunk, in particolare il payload in byte
     * @return contenuto, in byte, del chunk
     */
    public byte[] getChunk() {
        return chunk;
    }
}
